In a packet processing system packets are manipulated in various ways. For example, headers may be added to the packets, tags may be added to the packets, packets may be classified, or packets may be encrypted. Each of these manipulations may require different amounts of time to be processed. Consecutive packets within a given flow may be processed differently. This variable amount of processing time per packet may cause multiple packets to leave the processing unit in a different order from the order in which the packets entered the processing unit.